home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / lib / gedit-2 / plugins / snippets / SnippetComplete.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-04-20  |  11.6 KB  |  315 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import gobject
  5. import gtk
  6. from gtk import gdk
  7. import gedit
  8. from Helper import *
  9. from Snippet import Snippet
  10.  
  11. class CompleteModel(gtk.GenericTreeModel):
  12.     column_types = (str, object)
  13.     column_names = [
  14.         'Description',
  15.         'Node']
  16.     
  17.     def __init__(self, nodes, prefix = None, description_only = False):
  18.         gtk.GenericTreeModel.__init__(self)
  19.         self.nodes = self.create_list(nodes, prefix)
  20.         if not prefix:
  21.             if description_only:
  22.                 self.display_snippet = self.display_snippet_description
  23.             else:
  24.                 self.display_snippet = self.display_snippet_default
  25.             self.do_filter = self.filter_snippet_default
  26.             self.nodes.sort((lambda a, b: cmp(a['description'].lower(), b['description'].lower())))
  27.         else:
  28.             self.display_snippet = self.display_snippet_prefix
  29.             self.do_filter = self.filter_snippet_prefix
  30.             self.nodes.sort(self.sort_prefix)
  31.         self.visible_nodes = list(self.nodes)
  32.  
  33.     
  34.     def display_snippet_description(self, snippet):
  35.         return markup_escape(snippet['description'])
  36.  
  37.     
  38.     def display_snippet_default(self, snippet):
  39.         return snippet.display()
  40.  
  41.     
  42.     def display_snippet_prefix(self, snippet):
  43.         return '<b>' + markup_escape(snippet['tag']) + '</b>: ' + markup_escape(snippet['description'])
  44.  
  45.     
  46.     def sort_prefix(self, a, b):
  47.         return cmp(a['tag'] + ': ' + a['description'], b['tag'] + ': ' + b['description'])
  48.  
  49.     
  50.     def create_list(self, nodes, prefix):
  51.         if prefix:
  52.             prelen = len(prefix)
  53.         
  54.         result = []
  55.         for node in nodes:
  56.             s = Snippet(node)
  57.             if not prefix or prefix.lower() == s['tag'][0:prelen].lower():
  58.                 result.append(s)
  59.                 continue
  60.         
  61.         return result
  62.  
  63.     
  64.     def filter_snippet_process(self, new):
  65.         old = self.visible_nodes
  66.         oldlen = len(old)
  67.         self.visible_nodes = new
  68.         newlen = len(new)
  69.         for index in range(0, min(newlen, oldlen)):
  70.             path = (index,)
  71.             self.row_changed(path, self.get_iter(path))
  72.         
  73.         if oldlen > newlen:
  74.             for index in range(oldlen - 1, newlen - 1, -1):
  75.                 self.row_deleted((index,))
  76.             
  77.         elif newlen > oldlen:
  78.             for index in range(oldlen, newlen):
  79.                 path = (index,)
  80.                 self.row_inserted(path, self.get_iter(path))
  81.             
  82.         
  83.  
  84.     
  85.     def filter_snippet_prefix(self, s):
  86.         new = []
  87.         s = s.lower()
  88.         for node in self.nodes:
  89.             if s in node['tag'].lower():
  90.                 new.append(node)
  91.                 continue
  92.         
  93.         self.filter_snippet_process(new)
  94.  
  95.     
  96.     def filter_snippet_default(self, s):
  97.         new = []
  98.         s = s.lower()
  99.         for node in self.nodes:
  100.             if s in node['description'].lower():
  101.                 new.append(node)
  102.                 continue
  103.         
  104.         self.filter_snippet_process(new)
  105.  
  106.     
  107.     def get_snippet(self, path):
  108.         
  109.         try:
  110.             return self.visible_nodes[path[0]]
  111.         except IndexError:
  112.             return None
  113.  
  114.  
  115.     
  116.     def on_get_flags(self):
  117.         return gtk.TREE_MODEL_LIST_ONLY
  118.  
  119.     
  120.     def on_get_n_columns(self):
  121.         return len(self.column_types)
  122.  
  123.     
  124.     def on_get_column_type(self, index):
  125.         return self.column_types[index]
  126.  
  127.     
  128.     def on_get_iter(self, path):
  129.         
  130.         try:
  131.             return self.visible_nodes[path[0]]
  132.         except IndexError:
  133.             return None
  134.  
  135.  
  136.     
  137.     def on_get_path(self, rowref):
  138.         return self.visible_nodes.index(rowref)
  139.  
  140.     
  141.     def on_get_value(self, rowref, column):
  142.         if column == 0:
  143.             return self.display_snippet(rowref)
  144.         if column == 1:
  145.             return rowref
  146.  
  147.     
  148.     def on_iter_next(self, rowref):
  149.         
  150.         try:
  151.             next = self.visible_nodes.index(rowref) + 1
  152.         except ValueError:
  153.             next = 0
  154.  
  155.         
  156.         try:
  157.             return self.visible_nodes[next]
  158.         except IndexError:
  159.             return None
  160.  
  161.  
  162.     
  163.     def on_iter_children(self, parent):
  164.         if parent:
  165.             return None
  166.         return self.visible_nodes[0]
  167.  
  168.     
  169.     def on_iter_has_child(self, rowref):
  170.         return False
  171.  
  172.     
  173.     def on_iter_n_children(self, rowref):
  174.         if rowref:
  175.             return 0
  176.         return len(self.visible_nodes)
  177.  
  178.     
  179.     def on_iter_nth_child(self, parent, n):
  180.         if parent:
  181.             return None
  182.         
  183.         try:
  184.             return self.visible_nodes[n]
  185.         except IndexError:
  186.             parent
  187.             parent
  188.             return None
  189.  
  190.  
  191.     
  192.     def on_iter_parent(self, child):
  193.         pass
  194.  
  195.  
  196.  
  197. class SnippetComplete(gtk.Window):
  198.     
  199.     def __init__(self, nodes, prefix = None, description_only = False):
  200.         gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL)
  201.         self.set_keep_above(True)
  202.         self.set_decorated(False)
  203.         self.set_skip_taskbar_hint(True)
  204.         self.set_skip_pager_hint(True)
  205.         window = gedit.app_get_default().get_active_window()
  206.         window.get_group().add_window(self)
  207.         self.set_transient_for(window)
  208.         self.set_size_request(200, 300)
  209.         self.entry_changed_id = 0
  210.         self.model = CompleteModel(nodes, prefix, description_only)
  211.         self.build()
  212.         if prefix:
  213.             self.entry.set_text(prefix)
  214.         
  215.         self.connect('delete-event', (lambda x, y: x.destroy()))
  216.         self.connect('focus-out-event', self.on_focus_out)
  217.  
  218.     
  219.     def run(self):
  220.         if not self.model.nodes:
  221.             self.destroy()
  222.             return False
  223.         self.show_all()
  224.         self.entry.grab_focus()
  225.         self.entry.set_position(-1)
  226.         return True
  227.  
  228.     
  229.     def build_tree(self):
  230.         self.tree_view = gtk.TreeView(self.model)
  231.         self.tree_view.set_headers_visible(False)
  232.         column = gtk.TreeViewColumn(None)
  233.         renderer = gtk.CellRendererText()
  234.         column.pack_start(renderer, False)
  235.         column.set_attributes(renderer, markup = 0)
  236.         self.tree_view.append_column(column)
  237.         self.tree_view.connect('row-activated', self.on_tree_view_row_activated)
  238.         self.tree_view.connect('key-press-event', self.on_tree_view_key_press)
  239.  
  240.     
  241.     def build(self):
  242.         vbox = gtk.VBox(False, 3)
  243.         frame = gtk.Frame()
  244.         frame.set_shadow_type(gtk.SHADOW_ETCHED_IN)
  245.         self.entry = gtk.Entry()
  246.         vbox.pack_start(self.entry, False, False, 0)
  247.         self.build_tree()
  248.         sw = gtk.ScrolledWindow()
  249.         sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
  250.         sw.add(self.tree_view)
  251.         sw.set_shadow_type(gtk.SHADOW_OUT)
  252.         vbox.pack_start(sw, True, True, 0)
  253.         frame.add(vbox)
  254.         self.add(frame)
  255.         self.entry.connect('changed', self.on_entry_changed)
  256.         self.entry.connect('activate', self.on_entry_activate)
  257.         self.entry.connect('key-press-event', self.on_entry_key_press)
  258.  
  259.     
  260.     def snippet_activated(self, snippet):
  261.         self.emit('snippet-activated', snippet)
  262.         self.destroy()
  263.  
  264.     
  265.     def idle_filter(self, text):
  266.         self.entry_changed_id = 0
  267.         self.model.do_filter(text)
  268.         piter = self.model.get_iter_first()
  269.         if piter:
  270.             self.tree_view.get_selection().select_iter(piter)
  271.         
  272.         return False
  273.  
  274.     
  275.     def on_focus_out(self, wnd, event):
  276.         self.destroy()
  277.         return False
  278.  
  279.     
  280.     def on_entry_changed(self, entry):
  281.         if self.entry_changed_id:
  282.             gobject.source_remove(self.entry_changed_id)
  283.         
  284.         self.entry_changed_id = gobject.idle_add(self.idle_filter, entry.get_text())
  285.  
  286.     
  287.     def on_entry_key_press(self, entry, event):
  288.         if event.keyval == gdk.keyval_from_name('Escape'):
  289.             self.destroy()
  290.             return True
  291.         return False
  292.  
  293.     
  294.     def on_tree_view_key_press(self, entry, event):
  295.         if event.keyval == gdk.keyval_from_name('Escape'):
  296.             self.destroy()
  297.             return True
  298.         return False
  299.  
  300.     
  301.     def on_tree_view_row_activated(self, view, path, column):
  302.         snippet = self.model.get_snippet(path)
  303.         self.snippet_activated(snippet)
  304.  
  305.     
  306.     def on_entry_activate(self, entry):
  307.         (model, piter) = self.tree_view.get_selection().get_selected()
  308.         if piter:
  309.             snippet = self.model.get_snippet(self.model.get_path(piter))
  310.             self.snippet_activated(snippet)
  311.         
  312.  
  313.  
  314. gobject.signal_new('snippet-activated', SnippetComplete, gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_PYOBJECT,))
  315.